Move set/unset_vram_mapping into cirrus_vga.c, pending a fixup patch.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 12 May 2006 14:15:59 +0000 (15:15 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 12 May 2006 14:15:59 +0000 (15:15 +0100)
Signed-off-by: Yunhong Jiang <yunhong.jiang@intel.com>
tools/ioemu/hw/cirrus_vga.c
tools/ioemu/vl.c
tools/ioemu/vl.h

index fda80427718f580fa3e94244e0fd4d571a4cc653..80fd981df71a1867abc42546ec9736cd4db3be2d 100644 (file)
@@ -28,6 +28,9 @@
  */
 #include "vl.h"
 #include "vga_int.h"
+#ifndef _WIN32
+#include <sys/mman.h>
+#endif
 
 /*
  * TODO:
@@ -2455,13 +2458,96 @@ static CPUWriteMemoryFunc *cirrus_linear_bitblt_write[3] = {
     cirrus_linear_bitblt_writel,
 };
 
+extern FILE *logfile;
+#if defined(__i386__) || defined (__x86_64__)
+static void * set_vram_mapping(unsigned long begin, unsigned long end)
+{
+    unsigned long * extent_start = NULL;
+    unsigned long nr_extents;
+    void *vram_pointer = NULL;
+    int i;
+
+    /* align begin and end address */
+    begin = begin & TARGET_PAGE_MASK;
+    end = begin + VGA_RAM_SIZE;
+    end = (end + TARGET_PAGE_SIZE -1 ) & TARGET_PAGE_MASK;
+    nr_extents = (end - begin) >> TARGET_PAGE_BITS;
+
+    extent_start = malloc(sizeof(unsigned long) * nr_extents );
+    if (extent_start == NULL)
+    {
+        fprintf(stderr, "Failed malloc on set_vram_mapping\n");
+        return NULL;
+    }
+
+    memset(extent_start, 0, sizeof(unsigned long) * nr_extents);
+
+    for (i = 0; i < nr_extents; i++)
+    {
+        extent_start[i] = (begin + i * TARGET_PAGE_SIZE) >> TARGET_PAGE_BITS;
+    }
+
+    set_mm_mapping(xc_handle, domid, nr_extents, 0, extent_start);
+
+    if ( (vram_pointer =  xc_map_foreign_batch(xc_handle, domid,
+                                               PROT_READ|PROT_WRITE,
+                                               extent_start,
+                                               nr_extents)) == NULL)
+    {
+        fprintf(logfile,
+          "xc_map_foreign_batch vgaram returned error %d\n", errno);
+        return NULL;
+    }
+
+    memset(vram_pointer, 0, nr_extents * TARGET_PAGE_SIZE);
+
+    free(extent_start);
+
+    return vram_pointer;
+}
+
+static int unset_vram_mapping(unsigned long begin, unsigned long end)
+{
+    unsigned long * extent_start = NULL;
+    unsigned long nr_extents;
+    int i;
+
+    /* align begin and end address */
+
+    end = begin + VGA_RAM_SIZE;
+    begin = begin & TARGET_PAGE_MASK;
+    end = (end + TARGET_PAGE_SIZE -1 ) & TARGET_PAGE_MASK;
+    nr_extents = (end - begin) >> TARGET_PAGE_BITS;
+
+    extent_start = malloc(sizeof(unsigned long) * nr_extents );
+
+    if (extent_start == NULL)
+    {
+        fprintf(stderr, "Failed malloc on set_mm_mapping\n");
+        return -1;
+    }
+
+    memset(extent_start, 0, sizeof(unsigned long) * nr_extents);
+
+    for (i = 0; i < nr_extents; i++)
+        extent_start[i] = (begin + (i * TARGET_PAGE_SIZE)) >> TARGET_PAGE_BITS;
+
+    unset_mm_mapping(xc_handle, domid, nr_extents, 0, extent_start);
+
+    free(extent_start);
+
+    return 0;
+}
+
+#elif defined(__ia64__)
+static void * set_vram_mapping(unsigned long addr, unsigned long end) {}
+static int unset_vram_mapping(unsigned long addr, unsigned long end) {}
+#endif
+
 /* Compute the memory access functions */
 static void cirrus_update_memory_access(CirrusVGAState *s)
 {
     unsigned mode;
-    extern void * set_vram_mapping(unsigned long addr, unsigned long end);
-
-    extern int unset_vram_mapping(unsigned long addr, unsigned long end);
     extern int vga_accelerate;
 
     if ((s->sr[0x17] & 0x44) == 0x44) {
index 56c5bb986457d6cb00a43109d1f145e7c1be975d..6b60df6d4b678cd4c3de3fc3d6fae90fcb9e8c0c 100644 (file)
@@ -75,8 +75,6 @@
 #endif
 #endif /* CONFIG_SDL */
 
-#include "xenctrl.h"
-#include "xs.h"
 #include "exec-all.h"
 
 //#define DO_TB_FLUSH
@@ -2456,7 +2454,6 @@ static uint8_t *signal_stack;
 
 #include <xg_private.h>
 
-#if defined(__i386__) || defined (__x86_64__)
 #define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_USER)
 #define L2_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER)
 
@@ -2484,7 +2481,7 @@ get_vl2_table(unsigned long count, unsigned long start)
 }
 
 /* FIXME Flush the shadow page */
-static int unset_mm_mapping(int xc_handle,
+int unset_mm_mapping(int xc_handle,
                      uint32_t domid,
                      unsigned long nr_pages,
                      unsigned int address_bits,
@@ -2517,13 +2514,12 @@ static int unset_mm_mapping(int xc_handle,
     return err;
 }
 
-static int set_mm_mapping(int xc_handle,
+int set_mm_mapping(int xc_handle,
                     uint32_t domid,
                     unsigned long nr_pages,
                     unsigned int address_bits,
                     unsigned long *extent_start)
 {
-    int i;
     xc_dominfo_t info;
     int err = 0;
 
@@ -2564,91 +2560,6 @@ static int set_mm_mapping(int xc_handle,
     return 0;
 }
 
-
-void * set_vram_mapping(unsigned long begin, unsigned long end)
-{
-    unsigned long * extent_start = NULL;
-    unsigned long nr_extents;
-    void *vram_pointer = NULL;
-    int i;
-
-    /* align begin and end address */
-    begin = begin & PAGE_MASK;
-    end = begin + VGA_RAM_SIZE;
-    end = (end + PAGE_SIZE -1 )& PAGE_MASK;
-    nr_extents = (end - begin) >> PAGE_SHIFT;
-
-    extent_start = malloc(sizeof(unsigned long) * nr_extents );
-    if (extent_start == NULL)
-    {
-        fprintf(stderr, "Failed malloc on set_vram_mapping\n");
-        return NULL;
-    }
-
-    memset(extent_start, 0, sizeof(unsigned long) * nr_extents);
-
-    for (i = 0; i < nr_extents; i++)
-    {
-        extent_start[i] = (begin + i * PAGE_SIZE) >> PAGE_SHIFT;
-    }
-
-    set_mm_mapping(xc_handle, domid, nr_extents, 0, extent_start);
-
-    if ( (vram_pointer =  xc_map_foreign_batch(xc_handle, domid,
-                                               PROT_READ|PROT_WRITE,
-                                               extent_start,
-                                               nr_extents)) == NULL)
-    {
-        fprintf(logfile,
-          "xc_map_foreign_batch vgaram returned error %d\n", errno);
-        return NULL;
-    }
-
-    memset(vram_pointer, 0, nr_extents * PAGE_SIZE);
-
-    free(extent_start);
-
-    return vram_pointer;
-}
-
-int unset_vram_mapping(unsigned long begin, unsigned long end)
-{
-    unsigned long * extent_start = NULL;
-    unsigned long nr_extents;
-    int i;
-
-    /* align begin and end address */
-
-    end = begin + VGA_RAM_SIZE;
-    begin = begin & PAGE_MASK;
-    end = (end + PAGE_SIZE -1 ) & PAGE_MASK;
-    nr_extents = (end - begin) >> PAGE_SHIFT;
-
-    extent_start = malloc(sizeof(unsigned long) * nr_extents );
-
-    if (extent_start == NULL)
-    {
-        fprintf(stderr, "Failed malloc on set_mm_mapping\n");
-        return -1;
-    }
-
-    memset(extent_start, 0, sizeof(unsigned long) * nr_extents);
-
-    for (i = 0; i < nr_extents; i++)
-        extent_start[i] = (begin + (i * PAGE_SIZE)) >> PAGE_SHIFT;
-
-    unset_mm_mapping(xc_handle, domid, nr_extents, 0, extent_start);
-
-    free(extent_start);
-
-    return 0;
-}
-
-#elif defined(__ia64__)
-void set_vram_mapping(unsigned long addr, unsigned long end) {}
-void unset_vram_mapping(unsigned long addr, unsigned long end) {}
-#endif
-
 int main(int argc, char **argv)
 {
 #ifdef CONFIG_GDBSTUB
index 22f51562c970dedc00bfa4c017efb20a5f1f0c5f..5b6b4ce3430ff1506a20fa7fe4f878dc0e5f59b4 100644 (file)
@@ -38,6 +38,8 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 #include "audio/audio.h"
+#include "xenctrl.h"
+#include "xs.h"
 
 #ifndef O_LARGEFILE
 #define O_LARGEFILE 0
@@ -113,6 +115,19 @@ void qemu_system_shutdown_request(void);
 
 void main_loop_wait(int timeout);
 
+int unset_mm_mapping(int xc_handle,
+                     uint32_t domid,
+                     unsigned long nr_pages,
+                     unsigned int address_bits,
+                     unsigned long *extent_start);
+int set_mm_mapping(int xc_handle,
+                    uint32_t domid,
+                    unsigned long nr_pages,
+                    unsigned int address_bits,
+                    unsigned long *extent_start);
+
+extern int xc_handle;
+extern int domid;
 extern int audio_enabled;
 extern int sb16_enabled;
 extern int adlib_enabled;